package info.maxhis.util;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * 数据库操作类
 * @author iStar
 *
 */
public class DBTool {
	private static final String DB_NAME = "bn.db";	//数据库名称
	private static final int DB_VERSION = 2;			//数据库版本
	private static String DB_FRIEND = "CREATE TABLE IF NOT EXISTS `friend` (_id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(30) not null,year int not null,month int not null,day int not null,dateType int not null,sign varchar(10),phone varchar(20));";
	private static String DB_SMS = "CREATE TABLE IF NOT EXISTS `SMS` (_id INTEGER PRIMARY KEY AUTOINCREMENT,smsBody varchar not null);";
	
	private SQLiteDatabase db = null;
	private DatabaseHelper dbHelper = null;
	
	private static class DatabaseHelper extends SQLiteOpenHelper {

		/** 构造函数-创建一个数据库 */
		DatabaseHelper(Context context) {

			// 当调用getWritableDatabase()
			// 或 getReadableDatabase()方法时
			// 则创建一个数据库
			super(context, DB_NAME, null, DB_VERSION);
		}

		/** 创建一个表 */
		@Override
		public void onCreate(SQLiteDatabase db) {
			// 数据库没有表时创建一个
			db.execSQL(DB_FRIEND);
			db.execSQL(DB_SMS);
			db.execSQL("insert into SMS (smsBody) values(?)",new String[]{"当我把神灯擦三下后，灯神问我想许什么愿?我说：我想你帮我保佑一个正在看短信的人，希望那人生日快乐，永远幸福。"});
			db.execSQL("insert into SMS (smsBody) values(?)",new String[]{"一直以来有句话想对你说，但苦于没有机会，今天我终于鼓起勇气……生日快乐!"});
			db.execSQL("insert into SMS (smsBody) values(?)",new String[]{"在你生日的这一天，将快乐的音符，作为礼物送给你，愿你一年365天快快乐乐，平平安安!如果我有100万，我将送你999999，我有100万吗?没有。所以我只能用一毛钱发个短信，祝你生日快乐!"});
			db.execSQL("insert into SMS (smsBody) values(?)",new String[]{"寿星佬，我祝你所有的希望都能如愿，所有的梦想都能实现，所有的等候都能出现，所有的付出都能兑现。"});
			db.execSQL("insert into SMS (smsBody) values(?)",new String[]{"在你生日来临之际，祝事业正当午，身体壮如虎，金钱不胜数，干活不辛苦，悠闲像老鼠，浪漫似乐谱，快乐莫你属!"});
			db.execSQL("insert into SMS (smsBody) values(?)",new String[]{"送你一杯我精心特调的果汁，里面包含100cc的心想事成，200cc的天天开心，300cc的活力十足，祝生日快乐。"});
			db.execSQL("insert into SMS (smsBody) values(?)",new String[]{"今天是你的生日，为了表示祝贺，所有女厕和女浴室均免费向您开放，欢迎光临!"});
			db.execSQL("insert into SMS (smsBody) values(?)",new String[]{"因为你的降临，这一天成了一个美丽的日子，从此世界便多了一抹诱人的色彩。祝你生日快乐!"});
			db.execSQL("insert into SMS (smsBody) values(?)",new String[]{"猪，你快快长!猪，你早日出栏!猪，你生日快乐!"});
			db.execSQL("insert into SMS (smsBody) values(?)",new String[]{"今天是你的生日，你的朋友为你点播了一首动力火车的歌，请拿你的手机在地板上狠狠地敲一下……好，点歌完毕。"});
			db.execSQL("insert into SMS (smsBody) values(?)",new String[]{"希望我是第一个向你道“生日快乐”的朋友，愿这一年中快乐、成功!"});
			db.execSQL("insert into SMS (smsBody) values(?)",new String[]{"祝你：福如东海老王八，寿比南山大石头。"});
			
			try {
				//添加人人网uid
				db.execSQL("ALTER   TABLE   friend   ADD   uid   varchar(20) ");
				//增加头像
				db.execSQL("ALTER   TABLE   friend   ADD   headurl   varchar(40)");
			} catch (SQLException e) {
				Log.w("DBTool", e.getMessage());
			}
		}

		/** 升级数据库 */
		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			onCreate(db);
			
		}
	}
	
	/** 构造函数-取得Context */
	public DBTool(Context context) {
		dbHelper = new DatabaseHelper(context);
		db = dbHelper.getWritableDatabase();
	}


	/**
	 *  打开数据库，返回数据库对象
	 * @throws SQLException
	 */
	public void open() throws SQLException {
		db = dbHelper.getWritableDatabase();
	}

	/**
	 *  关闭数据库
	 */
	public void close() {
		db.close();
	}
	/**
	 * 开始事务
	 */
	public void beginTran(){
		db.beginTransaction();
	}
	/**
	 * 设置事务成功标志
	 */
	public void setTranSuc(){
		db.setTransactionSuccessful();
	}
	
	/**
	 * 结束事件
	 */
	public void endTran(){
		db.endTransaction();
	}
	/**
	 *  查询所有数据
	 * @param table
	 * @return
	 */
	public Cursor getAllData(String table) {
		return db.query(table, null, null, null, null, null, null);
	}

	/**
	 * 插入数据记录
	 * 
	 * @param table
	 *            要记录的表名
	 * @param nullId
	 *            　空值，一般指主键ＩＤ，SQLite数据主键为integer primary key 主键是为自增加数据
	 * @param newValue
	 *            字段的名值对数据。
	 * @return
	 */
	public long insert(String table, String nullId, ContentValues value) {
		long longret = 0;
		longret = db.insert(table, nullId, value);
		return longret;
	}

	/**
	 * 更新记录
	 * 
	 * @param table
	 *            表名
	 * @param value
	 *            字段的名值对数据
	 * @param where
	 *            字符串，如where a=? and b=?
	 * @param whereArgs
	 *            where 对应的参数
	 * @return
	 */
	public long update(String table, ContentValues value, String where,
			String[] whereArgs) {
		long longret = 0;
		longret = db.update(table, value, where, whereArgs);
		return longret;
	}

	/**
	 * 删除记录
	 * 
	 * @param table
	 *            表名
	 * @param where
	 *            字符串，如where a=? and b=?
	 * @param whereArgs
	 *            where 对应的参数
	 */
	public long delete(String table, String where, String[] whereArgs) {
		long longret = 0;
		longret = db.delete(table, where, whereArgs);
		return longret;
	}

	/**
	 * 
	 * @param table
	 * @param selection
	 * @param selectionArgs
	 * @param groupBy
	 * @return
	 */
	public Cursor queryWhere(String table, String selection,
			String[] selectionArgs, String orderBy) {
		return db.query(table, null, selection, selectionArgs, null, null,
				orderBy);
	}

	public Cursor querySql(String sql, String[] selectionArgs) {
		Cursor cs = db.rawQuery(sql, selectionArgs);
		int num = cs.getCount();
		if (num > 0) {
			// 设置游标起始位置
			cs.moveToFirst();
		} else {
			cs = null;
		}
		return cs;
	}

  	/**
	 *  判断数据库是否关闭
	 * @return
	 */
	public boolean isClosed() {
		return !db.isOpen();
	}
}
